package com.cn.wanxi.util;

import java.sql.*;
import java.util.List;

/**
 * 1.注册数据库驱动--手动加载第三方jar包，项目运行时需要加载，而且只加载一次
 * 2.取得数据库连接对象Connection
 * 3.创建SQL执行对象
 * 4.执行SQL命令，并返回结果集
 * 5.处理结果集
 * 6.依次关闭结果集
 */
public class JDBC {
    /**
     * 什么情况下只执行一次 ？
     * 在项目运行时加载：
     * static
     * 不用写方法调用，只要创建对象时，就会执行代码：{}，构造方法
     * 不创建对象也可以执行代码：static{}
     * PreparedStatement和Statement的区别？
     */
    static {
        try {
//            cj和数据库的版本相关，如果是5.*  不要cj 如果是8.* 需要cj
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    private static Connection connection = null;

    /**
     * 取得连接
     * @return
     */
    private static Connection getConnection() {
        String url = "jdbc:mysql://localhost:3306/fuzhuang?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai";
//        String url = "jdbc:mysql://127.0.0.1:3306/canyin?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai";
        String user = "root";
        String password = "123456";
        try {
//            if (connection == null) {
            return DriverManager.getConnection(url, user, password);
//            }

        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static ResultSet query(String sql) {
        Connection aa = getConnection();
//        System.out.println(aa);
        try {
//            得到执行对象
            PreparedStatement preparedStatement = aa.prepareStatement(sql);
//            执行命令
            return preparedStatement.executeQuery();

        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static int update(String sql) {

        Connection aa = getConnection();
        try {
//            得到执行对象
            PreparedStatement preparedStatement = aa.prepareStatement(sql);
//            执行命令
            return preparedStatement.executeUpdate();

        } catch (SQLException e) {
            e.printStackTrace();
        }
        return 0;
    }

    public static int updatea(String sql, List list) {

        Connection aa = getConnection();
        try {
//            得到执行对象
            PreparedStatement preparedStatement = aa.prepareStatement(sql);
//
//            preparedStatement.setString(1, username);
//            preparedStatement.setInt(2, id);
//            Object [] aa={username,id};

            for (int i = 0; i < list.size(); i++) {
                preparedStatement.setObject(i + 1, list.get(i));
            }
//            执行命令
            return preparedStatement.executeUpdate();

        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            if (connection != null) {
                try {
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
        return 0;
    }

    public static void main(String[] args) {
        getConnection();
//        System.out.println(connection);
    }

}